package com.base.cn.platform.os.service.manage.loreset;

import com.base.cn.platform.os.service.FeignAuthConfig;
import com.base.cn.platform.os.service.manage.BaseService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 知识点接口
 */
@FeignClient(name = BaseService.appName, configuration = FeignAuthConfig.class)
public interface LoresetPointService extends BaseService {

    /**
     * 查询知识点
     *
     * @param condition 知识点查询条件
     * @return 分层的知识点
     */
    @RequestMapping(contextPath + "/findLayeredLoresetPoint")
    List<Map<String, Object>> findLayeredLoresetPoint(@RequestBody Map<String, Object> condition);

    /**
     * 删除知识点数据
     *
     * @param ids 知识点ID串
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/deleteLoresetPoint")
    Map<String, Object> deleteLoresetPoint(@RequestParam("ids") String ids);

    /**
     * 修改知识点的父级归属
     *
     * @param id       知识点ID
     * @param parentId 知识点的父级节点
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/updateLoresetPointParentId")
    Map<String, Object> updateLoresetPointParentId(@RequestParam("id") BigDecimal id, @RequestParam("parentId") BigDecimal parentId);

    /**
     * 保存知识点数据
     *
     * @param loresetPoint 知识点数据对象
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/saveLoresetPoint")
    Map<String, Object> saveLoresetPoint(@RequestBody Map<String, Object> loresetPoint);

    /**
     * 通过知识体系ID，获取知识点数据点列表
     *
     * @param loresetIds 知识体系ID
     * @return List<LoresetPoint>知识点数据列表
     */
    @RequestMapping(contextPath + "/findLoresetPointListByLoresetIds")
    List<Map<String, Object>> findLoresetPointListByLoresetIds(@RequestParam("loresetIds") String loresetIds);

    /**
     * 通过知识体系ID串查询知识点数据列表
     *
     * @param loresetIds 知识点ID串
     * @return 分层且分组好的知识点数据Map，以知识体系Key，value是知识体系下的知识点列表且这个知识列表是分层好的
     */
    @RequestMapping(contextPath + "/findLayeredLoresetPoint")
    Map<BigDecimal, List<Map<String, Object>>> findLayeredLoresetPoint(@RequestParam("loresetIds") String loresetIds);

    /**
     * 通过ID获取知识点数据
     *
     * @param id 知识ID
     * @returnt 知识点对象
     */
    @RequestMapping(contextPath + "/findLoresetPointById")
    Map<String, Object> findLoresetPointById(@RequestParam("id") BigDecimal id);

    /**
     * 通过ID获取知识点数据
     *
     * @param ids     知识点id
     * @param layered 分层，即二级知识点放入一级知识点
     * @return 考点
     */
    @RequestMapping(contextPath + "/findLoresetPointByIdsToMap")
    Map<BigDecimal, Map<String, Object>> findLoresetPointByIdsToMap(@RequestParam("ids") String ids,
                                                                    @RequestParam("layered") boolean layered);

    /**
     * 刷新试卷试题量
     *
     * @param countMap 数据Map
     * @param status 试题状态
     */
    @RequestMapping(contextPath + "/refreshLoresetPoint")
    void refreshLoresetPoint(@RequestBody Map<String, Integer> countMap, @RequestParam("status") int status);
}
